import configparser

# 配置文件模板，用于校验配置文件格式
config_dict_template = {
    "api_key": "",
    "other_key": ""
}

def load_config_from_file(file_path: str = 'askai.conf') -> dict:
    """
    从配置文件加载配置。
    :param file_path: 配置文件路径，默认为 'askai.conf'。
    :return: 配置字典。
    """
    try:
        parser = configparser.ConfigParser()
        parser.read(file_path, encoding='utf-8')
        print("Sections found:", parser.sections())

        if 'chat' not in parser:
            raise ValueError("Missing 'chat' section in config file")

        config = parser['chat']

        # 检查配置文件格式
        if config_valid_checker(config):
            print("Valid config:", dict(config))
            return dict(config)
        else:
            raise ValueError('Invalid config file format')

    except Exception as e:
        print("Error loading config:", e)
        raise

def config_valid_checker(config: dict) -> bool:
    """
    校验配置文件格式是否符合模板。
    :param config: 配置字典。
    :return: 是否有效。
    """
    required_keys = config_dict_template.keys()
    return all(key in config for key in required_keys)

# 示例调用
if __name__ == "__main__":
    try:
        config = load_config_from_file()
        print("Loaded config:", config)
    except Exception as e:
        print("Failed to load config:", e)